package com.sxj.corejava.code04_循环结构;

import java.util.Scanner;

/**
 * @author 石小俊
 * @date 2025年01月03日
 * 斐波那契数列: 1 1 2 3 5 8 13 ... N, 前两项之和等于第三项
 * 在控制输入需要打印几个数, 输出对应数量的数字
 */
public class Test07_斐波那契数列 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入斐波那契数列的数量:");
        int num = sc.nextInt();
        if (num >= 1) {
            if (num == 1) {
                System.out.println("1");
            } else {
                // 打印前两项
                System.out.print("1 1 ");
                // 定义前两项的值
                // N-2
                int a = 1;
                // N-1
                int b = 1;
                // 打印从第三项开始的所有数
                for (int i = 3; i <= num; i++) {
                    // 当前项的值=前两项之和
                    // 第N项=(N-2)项+(N-1)项
                    int n = a + b;
                    // 当再次进入循环的时候,i的值会+1
                    // 原来的第N-1项,相当于此时的N-2项
                    // 因此,需要对N-2项重新赋值
                    a = b;
                    // 原来的第N项,相当于此时的第N-1项
                    // 因此,需要对N-1项重新赋值
                    b = n;

                    System.out.print(n + " ");
                }
            }
        } else {
            System.out.println("您输入的数量不合法,请重新输入");
        }
    }
}
